home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / WIN_PRO / DS-1.ZIP;1 / RTT.ZIP / RTT1.H < prev    next >
Encoding:
C/C++ Source or Header  |  1992-02-10  |  7.1 KB  |  171 lines

  1.  
  2. #define IndentInc 3
  3. #define MaxCol 80
  4.  
  5. #define Max(x,y)    ((x)>(y)?(x):(y))
  6.  
  7. /*
  8.  * cfile is used to create a list of cfiles created from a source file.
  9.  */
  10. struct cfile {
  11.    char *name;
  12.    struct cfile *next;
  13.    };
  14.  
  15. /*
  16.  * srcfile is an entry of dependants of a source file.
  17.  */
  18. struct srcfile {
  19.    char *name;
  20.    struct cfile *dependents;
  21.    struct srcfile *next;
  22.    };
  23.  
  24. #define ForceNl() nl = 1;
  25. extern int nl;  /* flag: a new-line is needed in the output */
  26.  
  27. /*
  28.  * The lexical analyzer recognizes 3 states. Operators are treated differently
  29.  *  in each state.
  30.  */
  31. #define DfltLex  0    /* Covers most input. */
  32. #define OpHead   1    /* In head of an operator definition. */
  33. #define TypeComp 2    /* In abstract type computation */
  34.  
  35. extern int lex_state;      /* state of operator recongition */
  36. extern char *compiler_def; /* #define for COMPILER */
  37. extern FILE *out_file;     /* output file */
  38. extern int def_fnd;        /* C input defines something concrete */
  39. extern char *inclname;     /* include file to be included by C compiler */
  40. extern int iconx_flg;      /* flag: indicate that iconx style code is needed */
  41. extern int enable_out;     /* enable output of C code */
  42. extern char *largeints;    /* "Largeints" or "NoLargeInts" */
  43.  
  44. /*
  45.  * The symbol table is used by the lexical analyser to decide whether an
  46.  *  identifier is an ordinary identifier, a typedef name, or a reserved
  47.  *  word. It is used by the parse tree builder to decide whether an
  48.  *  identifer is an ordinary C variable, a tended varaible, a parameter
  49.  *  to a run-time routine, or the special varaible "result".
  50.  */
  51. struct sym_entry {
  52.    int tok_id;        /* Ident, Type, or identification of reserved word */
  53.    char *image;        /* image of symbol */
  54.    int id_type;        /* OtherDcl, TndDesc, TndStr, TndBlk, Label, RtParm,
  55.                            DrfPrm, RsltLoc */
  56.    union {
  57.       struct {            /* RtParm: */
  58.          int param_num;        /*   parameter number */
  59.          int cur_loc;        /*   PrmTend, PrmCStr, PrmInt, or PrmDbl */
  60.          int non_tend;        /*   non-tended locations used */
  61.          struct sym_entry *next;
  62.          } param_info;
  63.       struct {                  /* TndDesc, TndStr, TndBlk: */
  64.          struct node *init;     /*   initial value from declaration */
  65.          char *blk_name;    /*   TndBlk: struct name of block */
  66.          struct sym_entry *next;
  67.          } tnd_var;
  68.       struct {            /* OtherDcl from "declare {...}": */
  69.          struct node *tqual;    /*   storage class, type qualifier list */
  70.          struct node *dcltor;    /*   declarator */
  71.          struct node *init;     /*   initial value from declaration */
  72.          struct sym_entry *next;
  73.          } declare_var;
  74.       word lbl_num;             /* label number used in in-line code */
  75.       int referenced;        /* RsltLoc: is referenced */
  76.       } u;
  77.    int t_indx;        /* index into tended array */
  78.    int il_indx;        /* index used in in-line code */
  79.    int nest_lvl;    /* 0 - reserved word, 1 - global, >= 2 - local */
  80.    int may_mod;         /* may be modified in particular piece of code */
  81.    int ref_cnt;
  82.    struct sym_entry *next;
  83.    };
  84.  
  85. /*
  86.  * A list is maintained of information needed to initialize tended descriptors.
  87.  */
  88. struct init_tend {
  89.    int t_indx;         /* index into tended array */
  90.    int init_typ;       /* TndDesc, TndStr, TndBlk */
  91.    struct node *init;  /* initial value from declaration */
  92.    int nest_lvl;            /* level of nesting of current use of tended slot */
  93.    int in_use;              /* tended slot is being used in current scope */
  94.    struct init_tend *next;
  95.    };
  96.  
  97.  
  98. extern int op_type;                /* Function, Keyword, Operator, or OrdFunc */
  99. extern char lc_letter;             /* f = function, o = operator, k = keyword */
  100. extern char uc_letter;             /* F = function, O = operator, K = keyword */
  101. extern char prfx1;                 /* 1st char of unique prefix for operation */
  102. extern char prfx2;                 /* 2nd char of unique prefix for operation */
  103. extern char *fname;                /* current source file name */
  104. extern int line;                   /* current source line number */
  105. extern struct implement *cur_impl; /* data base entry for current operator */
  106. extern struct token *comment;      /* descriptive comment for current oper */
  107. extern int n_tmp_str;              /* total number of string buffers needed */
  108. extern int n_tmp_cset;             /* total number of cset buffers needed */
  109. extern int nxt_sbuf;               /* index of next string buffer */
  110. extern int nxt_cbuf;               /* index of next cset buffer */
  111. extern struct sym_entry *params;   /* current list of parameters */
  112. extern struct sym_entry *decl_lst; /* declarations from "declare {...}" */
  113. extern struct init_tend *tend_lst; /* list of allocated tended slots */
  114. extern char *str_rslt;             /* string "result" in string table */
  115. extern word lbl_num;               /* next unused label number */
  116. extern struct sym_entry *v_len;    /* symbol entry for size of varargs */
  117. extern int il_indx;                /* next index into data base symbol table */
  118.  
  119. /*
  120.  * lvl_entry keeps track of what is happening at a level of nested declarations.
  121.  */
  122. struct lvl_entry {
  123.    int nest_lvl;
  124.    int kind_dcl;    /* IsTypedef, TndDesc, TndStr, TndBlk, or OtherDcl */
  125.    char *blk_name;      /* for TndBlk, the struct name of the block */
  126.    int parms_done;      /* level consists of parameter list which is complete */
  127.    struct sym_entry *tended; /* symbol table entries for tended varaibles */
  128.    struct lvl_entry *next;
  129.    };
  130.  
  131. extern struct lvl_entry *dcl_stk; /* stack of declaration contexts */
  132.  
  133. extern int fnc_ret;  /* RetInt, RetDbl, RetNoVal, or RetSig for current func */
  134.  
  135. #define NoAbstr  -1 /* no abstract return statement has been encountered */
  136. #define SomeType -2 /* assume returned value is consistant with abstract ret */
  137. extern int abs_ret; /* type from abstract return statement */
  138.  
  139. /*
  140.  * Definitions for use in parse tree nodes.
  141.  */
  142. #define NChildren 4
  143.  
  144. #define PrimryNd  1 /* simply a token */
  145. #define PrefxNd   2 /* a prefix expression */
  146. #define PstfxNd   3 /* a postfix expression */
  147. #define BinryNd   4 /* a binary expression (not necessarily infix) */
  148. #define TrnryNd   5 /* an expression with 3 subexpressions */
  149. #define QuadNd    6 /* an expression with 4 subexpressions */
  150. #define LstNd     7 /* list of declaration parts */
  151. #define CommaNd   8 /* arg lst, declarator lst, or init lst, not comma op */
  152. #define StrDclNd  9 /* structure field declaration */
  153. #define PreSpcNd 10 /* prefix expression that needs a space after it */
  154. #define ConCatNd 11 /* two ajacent peices of code with no other syntax */
  155. #define SymNd    12 /* a symbol (identifier) node */
  156. #define ExactCnv 13 /* (exact)integer or (exact)C_interger conversion */
  157. #define CompNd   14 /* compound statement */
  158. #define AbstrNd  15 /* abstract type computation */
  159. #define IcnTypNd 16 /* name of an Icon type */
  160.  
  161. struct node {
  162.    int nd_id;
  163.    struct token *tok;
  164.    union {
  165.       struct node *child;
  166.       struct sym_entry *sym;   /* used with SymNd & CompNd*/
  167.       } u[NChildren];
  168.    };
  169.  
  170. #include "rttproto.h"
  171.